package top.huhuiyu.springboot2.study.config;

import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import top.huhuiyu.springboot2.study.interceptor.AppInterceptor;

/**
 * @author 胡辉煜
 */
@Configuration
@RequiredArgsConstructor
public class MvcConfig implements WebMvcConfigurer {
  // 监听器，拦截器，异常处理，数据校验，aop，ioc

  private final AppInterceptor appInterceptor;

  @Bean
  public RestTemplate restTemplate() {
    return new RestTemplate();
  }

  @Override
  public void addCorsMappings(CorsRegistry registry) {
    WebMvcConfigurer.super.addCorsMappings(registry);
    // addMapping表示添加跨域的url映射，
    // /**表示所有的页面都支持跨域，一般会配置业务处理的url，而非全部
    // allowedMethods表示允许的http事件（POST，GET，DELETE...）
    // allowedOrigins表示允许跨域的域名，生产环境中一定会配置成限定的域名
    // 比如前端域名是huhuiyu.top，而springboot后端域名为api.huhuiyu.top
    // 那么应该允许的域名应该配置成huhuiyu.top，或者相对危险的*.huhuiyu.top
    // allowCredentials表示是否需要开启认证
    registry.addMapping("/**").allowedHeaders("*").allowedMethods("*").allowCredentials(false);

  }

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(appInterceptor);
    WebMvcConfigurer.super.addInterceptors(registry);
  }
}
